package com.leadCode.easy;

import java.util.Stack;

/**
 * 剑指 Offer 30. 包含 min 函数的栈
 * 定义栈的数据结构，请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中，调用 min、push 及 pop 的时间复杂度都是 O(1)。
 * MinStack是一个栈，用于存储一个整数序列的最小值。这个类实现了Stack接口，并添加了一个min方法，用于获取当前栈中的最小值。
 */
public class MinStack {
    // 实现Stack接口
    private Stack<Integer> stack;

    public MinStack() {
        stack = new Stack<>();
    }

    public void push(int val) {
        // 将新元素压入栈中
        stack.push(val);
    }

    public void pop() {
        // 弹出栈顶元素
        stack.pop();
    }

    public int top() {
        // 获取栈顶元素
        return stack.peek();
    }

    public int getMin() {
        // 获取当前栈中的最小值
        int min = stack.peek();
        for (int i = 0; i < stack.size(); i++) {
            if (stack.get(i) < min) {
                min = stack.get(i);
            }
        }
        return min;
    }
}
